.TITLE DRSMG .IDENT /01.03/ ; ; Copyright (c) 1995-1999 by Mentec, Inc., U.S.A. ; All rights reserved ; ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED ; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. ; ; P. J. BEZEREDI 30-MAR-81 ; ; SEND MESSAGE DIRECTIVE ; ; PREVIOUSLY MODIFIED BY: ; ; T. M. MARTIN ; ; MODIFIED BY: ; ; J. M. LAWLER 29-JUN-83 1.02 ; ; JL162 -- FINISH CONDITIONALIZATION ; ; S.C. ADAMS 29-JULY-83 1.03 ; ; SA510 -- REPLACE CALLS TO $CRPKT AND $QUPKT WITH $CREQU ; ; ; MACRO LIBRARY CALLS ; .MCALL EPKDF$ EPKDF$ ;DEFINE ERROR LOG PACKET OFFSETS ;+ ; **-$DRSMG-SEND MESSAGE ; ; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO SEND A MESSAGE TO A ; SYSTEM PROCESS. ; ; DPB FORMAT: ; ; WD. 00 -- DIC(171.),DPB SIZE (VARIABLE) ; WD. 01 -- TARGET IDENTIFIER ; WD. 02 -- ADDRESS OF MESSAGE BUFFER ; WD. 03 -- LENGTH OF MESSAGE BUFFER ; WD. 04 -- START OF TARGET SPECIFIC PARAMETER LIST ; ; PARAMETER LIST FOR TARGET SPECIFIC IDENTIFIER SM.SER: ; ; WD. 04 -- ERROR LOG PACKET TYPE CODE ; WD. 05 -- ERROR LOG PACKET SUBTYPE CODE ; WD. 06 -- LOGICAL UNIT NUMBER (OPTIONAL) ; WD. 07 -- CONTROL MASK WORD (OPTIONAL) ; ; INPUTS: ; ; R2=ADDRESS OF THE SECOND TASK STATUS WORD OF THE CURRENT TASK. ; R3=ADDRESS OF THE TARGET IDENTIFIER WORD IN THE DPB. ; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ; R5=ADDRESS OF THE TCB OF THE CURRENT TASK. ; ; OUTPUTS: ; ; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED. ; DIRECTIVE STATUS OF +1 IS RETURNED. ; C=1 IF DIRECTIVE IS REJECTED. ; DIRECTIVE STATUS OF 'D.RS5' IS RETURNED IF THE ; SPECIFIED LUN IS ASSIGNED TO A NON-MASS ; STORAGE DEVICE, OR THE LUN IS NOT ASSIGNED. ; DIRECTIVE STATUS OF 'D.RS8' IS RETURNED IF INVALID ; TARGET PROCESS OR CONTROL MASK. ; DIRECTIVE STATUS OF 'D.RS99' IS RETURNED IF INVALID ; DPB SIZE. ; DIRECTIVE STATUS OF 'D.RS16' IS RETURNED IF PRIVILEGE ; VIOLATION. ; DIRECTIVE STATUS OF 'D.RS7' IS RETURNED IF ERROR LOGGING ; IS NOT ACTIVE AND PACKET CANNOT BE QUEUED. ; DIRECTIVE STATUS OF 'D.RS1' IS RETURNED IF THERE IS ; NOT ENOUGH POOL. ;- .IF DF, E$$LOG $DRSMG::MOVB -1(R3),R0 ;GET THE DPB SIZE CMP (R3)+,#SM.SER ;IS THE TARGET PROCESS ERROR LOGGING? BNE ER8 ;IF NE NO CMPB R0,#6. ;IS THE DPB BIG ENOUGH? BLO ER99 ;IF LO NO MOV #SM.HDR!SM.TSK,-(SP) ;INITIALIZE THE FLAGS TO USE CMPB R0,#8. ;DOES A CONTROL MASK EXIST? BLO 10$ ;IF LO NO BIS 12(R3),(SP) ;OBTAIN THE CONTROL MASK WORD BIT #SM.DID!SM.DOP!SM.DAC!SM.DAT,(SP) ;INVALID FLAGS? BNE ER8 ;IF NE YES BIT #SM.ZER,(SP) ;ZERO I/O COUNTS? BEQ 10$ ;IF EQ NO BIT #T3.PRV,T.ST3(R5) ;IS THE TASK PRIVILEGED? BEQ ER16 ;IF EQ NO 10$: TST $ERRPT ;IS THE ERROR LOGGER INSTALLED? BEQ ER7 ;IF EQ NO BIT #ES.DAT,$ERFLA ;CAN WE LOG DATA PACKETS? BNE 20$ ;IF NE YES BIT #SM.CMD,(SP) ;NO, IS THIS A COMMAND? BEQ ER7 ;IF EQ NO, ERROR 20$: CMP (R3)+,(R3)+ ;POINT TO THE TYPE CODE WORD MOV (R3)+,-(SP) ;GET THE TYPE CODE WORD MOVB (R3)+,1(SP) ;STUFF THE SUBCODE TSTB (R3)+ ;POINT TO POSSIBLE LUN WORD CMPB R0,#7. ;DOES A LUN WORD EXIST? BLO 30$ ;IF LO NO TST (R3) ;IS A LUN NUMBER PRESENT? BEQ 30$ ;IF EQ NO CALL $MPLUN ;MAP THE LUN BCC 26$ ;IF CC LUN IS ASSIGNED TO SOMETHING 24$: DRSTS D.RS5 ;NOT ASSIGNED TO ERROR LOGGING DEVICE 26$: BIT #DV.MSD,U.CW1(R0) ;MASS STORAGE DEVICE? BEQ 24$ ;IF EQ NO, NOT ERROR LOGGING DEVICE TST -(R3) ;POINT BACK TO THE LUN BIS #SM.DID,2(SP) ;YES, LOG A DEVICE IDENT SUBPACKET 30$: MOV R0,-(SP) ;SAVE POSSIBLE UCB ADDRESS CMP -(R3),-(R3) ;POINT BACK TO THE BUFFER LENGTH MOV -(R3),R1 ;GET BUFFER LENGTH IN BYTES BEQ 40$ ;IF EQ NO BUFFER BIS #SM.DAT,4(SP) ;INDICATE A DATA SUBPACKET IS PRESENT MOV -(R3),R3 ;GET THE BUFFER ADDRESS MOV R1,-(SP) ;COPY BUFFER LENGTH CALL $ACHKP ;ADDRESS CHECK AND MAP BUFFER MOV (SP)+,R1 ;RESTORE BUFFER LENGTH 40$: MOV (SP)+,R5 ;RETRIEVE UCB ADDRESS MOV (SP)+,R0 ;RETRIEVE ERROR CODES MOV (SP)+,R2 ;RETRIEVE CONTROL MASK WORD MOV $TKTCB,R4 ;RETRIEVE THE TASK TCB ADDRESS CALL $CREQU ; CREATE AND QUEUE ERROR LOG PACKET BCS ER1 ; IF CS NO PACKET RETURN ER1: DRSTS D.RS1 ;NO POOL SPACE ER7: DRSTS D.RS7 ;ERROR LOGGING NOT ACTIVE ER8: DRSTS D.RS8 ;INVALID TARGET OR CONTROL MASK ER16: DRSTS D.RS16 ;PRIVILEGE VIOLATION ER99: DRSTS D.RS99 ;INVALID DPB SIZE .ENDC ; DF E$$LOG .END